Общеизвестен способ выражения на чистой лямбде чисел Черча:
one = \f x -> f x
two = \f x -> f $ f x
three = \f x -> f $ f $ f x
four = \f x -> f $ f $ f $ f x
...
Для всех из них (кроме, разумеется, one) тайпчекер выводит тип (a->a)->(a->a). Ясно как он это делает. Пусть x::a, тогда
f x => f :: a -> a1
(
Read more... )